স্প্রিং জেডিবিসি (Spring JDBC) ডাটাবেস ট্রানজেকশন পরিচালনার জন্য একটি শক্তিশালী এবং নমনীয় ট্রানজেকশন ম্যানেজমেন্ট সাপোর্ট সরবরাহ করে। এটি ডাটাবেসের অপারেশনগুলোর ধারাবাহিকতা এবং সঠিকতা নিশ্চিত করে।
একাধিক ডাটাবেস অপারেশনের মধ্যে ধারাবাহিকতা এবং ডাটা ইন্টেগ্রিটি বজায় রাখতে ট্রানজেকশন ব্যবহৃত হয়।
@Transactional
অ্যানোটেশন ব্যবহার করে ট্রানজেকশন পরিচালনা করা হয়।Configuration:
@Configuration
@EnableTransactionManagement
public class AppConfig {
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/mydb");
dataSource.setUsername("user");
dataSource.setPassword("password");
return dataSource;
}
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
Service Layer Example:
@Service
public class BankService {
@Autowired
private JdbcTemplate jdbcTemplate;
@Transactional
public void transferMoney(int fromAccountId, int toAccountId, double amount) {
// Deduct money from sender's account
String deductSql = "UPDATE accounts SET balance = balance - ? WHERE id = ?";
jdbcTemplate.update(deductSql, amount, fromAccountId);
// Simulate an error for testing rollback
if (amount > 1000) {
throw new RuntimeException("Transfer amount exceeds limit!");
}
// Add money to receiver's account
String addSql = "UPDATE accounts SET balance = balance + ? WHERE id = ?";
jdbcTemplate.update(addSql, amount, toAccountId);
System.out.println("Money transferred successfully!");
}
}
Controller or Main Method:
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
BankService bankService = context.getBean(BankService.class);
try {
bankService.transferMoney(1, 2, 500); // Successful transfer
bankService.transferMoney(1, 2, 1500); // Will throw exception, rollback
} catch (Exception e) {
System.out.println("Transaction failed: " + e.getMessage());
}
}
Service Layer Example:
@Service
public class BankService {
@Autowired
private JdbcTemplate jdbcTemplate;
@Autowired
private PlatformTransactionManager transactionManager;
public void transferMoney(int fromAccountId, int toAccountId, double amount) {
TransactionDefinition definition = new DefaultTransactionDefinition();
TransactionStatus status = transactionManager.getTransaction(definition);
try {
// Deduct money from sender's account
String deductSql = "UPDATE accounts SET balance = balance - ? WHERE id = ?";
jdbcTemplate.update(deductSql, amount, fromAccountId);
// Simulate an error for testing rollback
if (amount > 1000) {
throw new RuntimeException("Transfer amount exceeds limit!");
}
// Add money to receiver's account
String addSql = "UPDATE accounts SET balance = balance + ? WHERE id = ?";
jdbcTemplate.update(addSql, amount, toAccountId);
transactionManager.commit(status);
System.out.println("Money transferred successfully!");
} catch (Exception e) {
transactionManager.rollback(status);
System.out.println("Transaction failed, rolled back: " + e.getMessage());
}
}
}
@Transactional
:উদাহরণ:
@Transactional
public void someMethod() {
// transactional code
}
rollbackFor
ব্যবহার করা যায়।উদাহরণ:
@Transactional(rollbackFor = {SQLException.class})
public void someMethod() {
// transactional code
}
Spring এর ট্রানজেকশন ম্যানেজমেন্ট বিভিন্ন প্রোপাগেশন লেভেল সমর্থন করে। কিছু গুরুত্বপূর্ণ প্রোপাগেশন মোড:
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void anotherMethod() {
// Runs in a new transaction
}
স্প্রিং জেডিবিসি এর ট্রানজেকশন ম্যানেজমেন্ট ডাটাবেস অপারেশনের ধারাবাহিকতা এবং নির্ভুলতা নিশ্চিত করতে গুরুত্বপূর্ণ ভূমিকা পালন করে। @Transactional
ব্যবহার করে সহজেই ট্রানজেকশন পরিচালনা করা যায়, যা প্রোগ্রামিং এর জন্য সুবিধাজনক।
Read more